# 导入 Flask 类，用于创建 Flask 应用
from flask import Flask
# 导入 BaseConverter 类，用于创建自定义 URL 转换器
from werkzeug.routing import BaseConverter

# 创建一个 Flask 应用实例，__name__ 参数用于确定应用的位置
app = Flask(__name__)

# 定义一个路由，用于处理根路径 ('/') 的请求
@app.route('/')
def index():
    # 返回一个简单的字符串响应
    return 'hello'

# 定义一个路由，用于处理 '/string_converter/<user_id>' 路径的请求
# 默认情况下，<user_id> 是一个字符串类型的参数
@app.route('/string_converter/<user_id>')
def string_converter(user_id):
    # 打印 user_id 参数的值和类型
    print(user_id)
    print(type(user_id))
    # 返回包含 user_id 的响应
    return 'hello ' + user_id

# 定义一个路由，用于处理 '/int_converter/<int:user_id>' 路径的请求
# <int:user_id> 表示 user_id 参数必须是整数类型
@app.route('/int_converter/<int:user_id>')
def int_converter(user_id):
    # 打印 user_id 参数的值和类型
    print(user_id)
    print(type(user_id))
    # 返回包含 user_id 的响应
    return f'hello {user_id}'

# 定义一个路由，用于处理 '/int_converter_min/<int(min=1):user_id>' 路径的请求
# <int(min=1):user_id> 表示 user_id 参数必须是整数类型，并且不小于 1
@app.route('/int_converter_min/<int(min=1):user_id>')
def int_converter_min(user_id):
    # 打印 user_id 参数的值和类型
    print(user_id)
    print(type(user_id))
    # 返回包含 user_id 的响应
    return f'hello {user_id}'

# 定义一个路由，用于处理 '/float_converter/<float:user_id>' 路径的请求
# <float:user_id> 表示 user_id 参数必须是浮点数类型
@app.route('/float_converter/<float:user_id>')
def float_converter(user_id):
    # 打印 user_id 参数的值和类型
    print(user_id)
    print(type(user_id))
    # 返回包含 user_id 的响应
    return f'hello {user_id}'

# 定义一个路由，用于处理 '/any_converter/<any(jack, bob, lee):user_name>' 路径的请求
# <any(jack, bob, lee):user_name> 表示 user_name 参数只能是 'jack', 'bob', 或 'lee' 中的一个
@app.route('/any_converter/<any(jack, bob, lee):user_name>')
def any_converter(user_name):
    # 打印 user_name 参数的值和类型
    print(user_name)
    print(type(user_name))
    # 返回包含 user_name 的响应
    return f'hello {user_name}'

# 自定义一个 URL 转换器类，继承自 BaseConverter
class RegexConverter(BaseConverter):
    # 定义正则表达式规则，用于匹配三个大写字母的字符串
    regex = r'[A-Z]{3}'

# 将自定义的 RegexConverter 注册到 Flask 应用中，命名为 'regex'
app.url_map.converters['regex'] = RegexConverter

# 定义一个路由，用于处理 '/regex_converter/<regex:username>' 路径的请求
# <regex:username> 表示 username 参数必须符合自定义的正则表达式规则
@app.route('/regex_converter/<regex:username>')
def regex_converter(username):
    # 打印 username 参数的值和类型
    print(username)
    print(type(username))
    # 返回包含 username 的响应
    return f'hello {username}'

# 确保只有在直接运行此脚本时才启动 Flask 应用
if __name__ == '__main__':
    # 启动 Flask 应用，并启用调试模式
    app.run(debug=True)